import config from '@/config'
import { ADMIN } from '@/config/default'
import { formatFullPath } from '@/utils/i18n'
import { filterMenu } from '@/utils/authority-utils'
import { getLocalSetting } from '@/utils/theme-utils'
import deepClone from 'lodash.clonedeep'

const localSetting = getLocalSetting(true)
const customTitlesStr = sessionStorage.getItem(process.env.VUE_APP_TBAS_TITLES_KEY)
const customTitles = (customTitlesStr && JSON.parse(customTitlesStr)) || []

const state = {
  // 菜单数据
  menuData: [],
  // 是否移动端
  isMobile: false,
  // 动画效果
  animates: ADMIN.animates,
  // 调色板
  palettes: ADMIN.palettes,
  // 客户名称
  customTitles: customTitles,
  // 页面最小高度
  pageMinHeight: 0,
  // 第一个选中
  activatedFirst: undefined,
  // 通用配置
  ...config,
  // 本地缓存设置
  ...localSetting,
}
const getters = {
  menuData(state, getters, rootState) {
    if (state.filterMenu) {
      const { permissions, roles } = rootState.account
      return filterMenu(deepClone(state.menuData), permissions, roles)
    }
    return state.menuData
  },
  firstMenu(state, getters) {
    const {menuData} = getters
    if (menuData.length > 0 && !menuData[0].fullPath) {
      formatFullPath(menuData)
    }
    return menuData.map(item => {
      const menuItem = {...item}
      delete menuItem.children
      return menuItem
    })
  },
  subMenu(state) {
    const {menuData, activatedFirst} = state
    console.log('menuData', menuData)
    if (menuData.length > 0 && !menuData[0].fullPath) {
      formatFullPath(menuData)
    }
    const current = menuData.find(menu => menu.fullPath === activatedFirst)
    return current && current.children || []
  }
}

const mutations = {
  setDevice (state, isMobile) {
    state.isMobile = isMobile
  },
  setTheme (state, theme) {
    state.theme = theme
  },
  setLayout (state, layout) {
    state.layout = layout
  },
  setMultiPage (state, multiPage) {
    state.multiPage = multiPage
  },
  setAnimate (state, animate) {
    state.animate = animate
  },
  setWeekMode(state, weekMode) {
    state.weekMode = weekMode
  },
  setFixedHeader(state, fixedHeader) {
    state.fixedHeader = fixedHeader
  },
  setFixedSideBar(state, fixedSideBar) {
    state.fixedSideBar = fixedSideBar
  },
  setLang(state, lang) {
    state.lang = lang
  },
  setHideSetting(state, hideSetting) {
    state.hideSetting = hideSetting
  },
  correctPageMinHeight(state, minHeight) {
    state.pageMinHeight += minHeight
  },
  setMenuData(state, menuData) {
    state.menuData = menuData
  },
  setAsyncRoutes(state, asyncRoutes) {
    state.asyncRoutes = asyncRoutes
  },
  setPageWidth(state, pageWidth) {
    state.pageWidth = pageWidth
  },
  setActivatedFirst(state, activatedFirst) {
    state.activatedFirst = activatedFirst
  },
  setFixedTabs(state, fixedTabs) {
    state.fixedTabs = fixedTabs
  },
  setCustomTitle(state, {path, title}) {
    if (title) {
      const obj = state.customTitles.find(item => item.path === path)
      if (obj) {
        obj.title = title
      } else {
        state.customTitles.push({path, title})
      }
      sessionStorage.setItem(process.env.VUE_APP_TBAS_TITLES_KEY, JSON.stringify(state.customTitles))
    }
  }
}

export default {
  namespaced: true,
  state,
  getters,
  mutations
}